package com.aiYouPms.common.util;

import com.aiYouPms.common.model.Menu;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 菜单树形结构构建工具类
 */
public class MenuTreeUtil {

    /**
     * 构建菜单树形结构
     *
     * @param menus 菜单列表
     * @return 树形结构的菜单列表
     */
    public static List<Menu> buildMenuTree(List<Menu> menus) {
        // 获取根节点菜单（parentId = 0）
        List<Menu> rootMenus = menus.stream()
                .filter(menu -> menu.getParentId().equals(0))
                .sorted((m1, m2) -> m1.getSort().compareTo(m2.getSort()))
                .collect(Collectors.toList());

        // 递归构建子菜单树
        return rootMenus.stream()
                .peek(menu -> menu.setChildren(buildChildren(menu, menus)))
                .collect(Collectors.toList());
    }

    /**
     * 递归构建子菜单
     *
     * @param parent 父菜单
     * @param menus  菜单列表
     * @return 子菜单列表
     */
    private static List<Menu> buildChildren(Menu parent, List<Menu> menus) {
        List<Menu> children = menus.stream()
                .filter(menu -> menu.getParentId().equals(parent.getId()))
                .sorted((m1, m2) -> Integer.compare(m1.getSort(), m2.getSort()))
                .collect(Collectors.toList());

        // 递归构建子菜单的子菜单
        return children.stream()
                .peek(child -> child.setChildren(buildChildren(child, menus)))
                .collect(Collectors.toList());
    }
}